package util.AST.Comando;

import java.util.ArrayList;

import checker.SemanticException;
import checker.Visitor;

import util.AST.AST;
import util.AST.Terminal.ID;


public class DecFuncao extends Comando {

	private String tipo;
	private ID nomeFuncao;
	private Parametros parametros;
	private ArrayList <Comando> comandos;
	
	public DecFuncao(ID nome, Parametros args, ArrayList <Comando> comandos){
		this.nomeFuncao = nome;
		this.parametros = args;
		this.comandos = comandos;
	}
	
	public DecFuncao(){
		
	}
	
	public ID getNomeFuncao(){
		return this.nomeFuncao;
	}
	
	public ArrayList <Comando> getComandos(){
		return this.comandos;
	}

	public String toString(int level) {
	
		int nextLevel = level+5;
		StringBuffer str = new StringBuffer();
		str.append("DecFuncao\n");
		
		if ( this.nomeFuncao != null ) {
			str.append(super.getSpaces(nextLevel) + "|-" + this.nomeFuncao.toString(nextLevel));
		}
		if ( this.parametros != null ) {
			str.append(super.getSpaces(nextLevel) + "|-" + this.parametros.toString(nextLevel));
		}
		if ( this.comandos != null ) {
			
			for (Comando param : this.comandos) {
				str.append(super.getSpaces(nextLevel+5) + "|-");
				str.append(param.toString(nextLevel+5));
			}
		}
		
		return str.toString();
	}
	//

	@Override
	public Object visit(Visitor v, Object o) throws SemanticException {
		return v.visitDecFuncao(this, o);
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public Parametros getParametros() {
		return this.parametros;
	}
}
	

